package top.heue.test.fragment.main

import android.view.View
import kotlinx.coroutines.delay
import top.heue.test.activity.container.DefeatCallback
import top.heue.test.fragment.mvi.MVIFragment
import top.heue.utils.FC
import top.heue.utils.lifecycle.base.BaseModel
import top.heue.utils.lifecycle.helper.onIo
import top.heue.utils.lifecycle.helper.onUnconfined
import top.heue.utils.log.base.ILRuntime
import top.heue.utils.log.L
import top.heue.utils.log.LogLevel
import top.heue.utils.log.base.BaseHandler

class MainModel : BaseModel() {

    fun init() {
        L.runtime = object : ILRuntime {
            override fun run(block: () -> Unit) {
                onUnconfined { block() }
            }
        }
        L.addHandler(object : BaseHandler<BaseModel>() {
            override val priority: Int = 0
            override fun handle(any: BaseModel): String {
                return "这是一个页面的Model"
            }
        })
    }

    fun logTest() {
        L.e("多行文本测试")
        L.e(
            """
            我刚接触Kotlin (我有Java背景)，似乎不知道如何检查字符串是否包含关键字列表中的匹配项。

            我想要做的是检查一个字符串是否包含关键字数组(请不区分大小写)中的匹配项。如果是，则打印出匹配的关键字和包含该关键字的字符串。(我将遍历文件中的一堆字符串)。
        """.trimIndent()
        )
        L.e("格式化测试")
        L.w("CES", "%s\n%s", "你好", "再见", "最后的测试")
        L.w("CES", "%s\n%s")
        L.w("CES", "%s\n%s%s")
        L.w("1", "%s%s%s")
        L.e(listOf("1", "2", "3"))
        L.e(mapOf("1" to "a", "2" to "b", "3" to "c"))
        L.w("aaa", 123)
    }

    fun chTest() {
        onIo {
            L.e(listOf("1", "2", "3"))
            L.e(mapOf("1" to "a", "2" to "b", "3" to "c"))
            L.w("aaa", 123)
            L.e(MainFragment::class.java)
            L.logLevel = LogLevel.DEBUG
            L.e("距离时间测试")
            L.e(L.apart())
            delay(500)
            L.e("最终时间", "最终时间是这个数字", L.apart())
            L.e(this@MainModel)
        }
    }

    fun click(view: View) {
        FC.startFragment(view.context, MVIFragment::class.java, ) {
            callbackClass = DefeatCallback::class.java
            callbackParams = mutableListOf("123")
        }
    }
}